home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 076-100 / disk_099 / a-render / build_objects / lathe.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  3KB  |  160 lines

  1.  
  2.  
  3. /*
  4. **  Lathe Program
  5. */
  6.  
  7. #include <stdio.h>
  8.  
  9. float rot = 180.0;
  10. float x[35][35], y[35][35], z[35][35];
  11. float ix[35][1], iy[35][1];
  12. int   first_end, second_end, npolys=4, npts=4;
  13.  
  14. float sin(), cos();
  15. FILE *fopen(), *fp;
  16.  
  17. main()
  18. {
  19. int verts, polys, i;
  20. float xx, yy;
  21. char filename[64];
  22.  
  23.   input_vali("Number of Points ? ", &npts);
  24.  
  25.   for (i = 0; i<npts; i++) {
  26.     printf("Point %d\n", i+1);
  27.     xx=i+1; yy=i+1;
  28.     input_valf("X value - ", &xx);
  29.     input_valf("Y value - ", &yy);
  30.     ix[i][0] = xx;
  31.     iy[i][0] = yy;
  32.   }
  33.  
  34.   input_valf("Number of Degrees of Rotation ? ", &rot);
  35.   input_vali("Number of Polygons in Rotation ? ", &npolys);
  36.   input_vali("Close the First End (0=no, 1=yes) ? ", &first_end);
  37.   input_vali("Close the Second End (0=no, 1=yes) ? ", &second_end);
  38.  
  39.   /* open */
  40.   verts = npolys + 1;
  41.   verts = verts * npts;
  42.   polys = npts - 1;
  43.   polys = polys * npolys;
  44.  
  45.   input_string("Filename to write ? ", &filename[0]);
  46.   if (strlen(&filename[0]) == 0) {
  47.     printf("Missing filename\n");
  48.     exit();
  49.   }
  50.   if ((fp = fopen(&filename, "w")) == NULL) {
  51.     printf("ERROR OPENING FILE\n");
  52.     exit();
  53.   }
  54.  
  55.   fprintf(fp, "1 1 2 %d %d ", polys, verts);
  56.  
  57.   rotate_vertices();
  58.   list_vertices();
  59.   fclose(fp);
  60.   printf("Done.\n");
  61. }
  62.  
  63. rotate_vertices()
  64. {
  65. float rotperpoly, radrotperpoly, totrot, radians;
  66. int rr, ii;
  67. float yy, work;
  68.  
  69.   radians = 6.28 / 360;
  70.   rotperpoly = rot / npolys;
  71.   radrotperpoly = rotperpoly * radians;
  72.   totrot = 0;
  73.  
  74.   for (rr=0; rr<=npolys; rr++) {
  75.     for (ii=0; ii<npts; ii++) {
  76.       x[ii][rr] = ix[ii][0];
  77.       yy = iy[ii][0];
  78.       work = cos(totrot);
  79.       y[ii][rr] = work * yy;
  80.       work = sin(totrot);
  81.       z[ii][rr] = work * yy;
  82.       fprintf(fp,"%f %f %f ", x[ii][rr], y[ii][rr], z[ii][rr]);
  83.     }
  84.   totrot = totrot + radrotperpoly;
  85.   }
  86. }
  87.  
  88. list_vertices()
  89. {
  90. int np, ii, limit;
  91.  
  92.   limit = npolys-1;
  93.   limit = npts * limit;
  94.   limit = limit + 1;
  95.  
  96.   for (np=1; np <= limit; np=np+npts) {
  97.     for (ii=0; ii<=npts-2; ii++) {
  98.       fprintf(fp,"5 ");
  99.       fprintf(fp,"%d ", np+ii);
  100.       fprintf(fp,"%d ", np+npts+ii);
  101.       fprintf(fp,"%d ", np+npts+1+ii);
  102.       fprintf(fp,"%d ", np+1+ii);
  103.       fprintf(fp,"%d ", np+ii);
  104.     }
  105.   }
  106. }
  107.  
  108.  
  109. /*
  110. **  input routines
  111. */
  112.  
  113. input_vali(prompt,value)
  114. int *value;
  115. char prompt[];
  116. {
  117. int val;
  118. char character;
  119.  
  120.   printf("%s <%d> - ",prompt,*value);
  121.   scanf("%d",&val);
  122.   if (val != -1) *value = val;
  123.   scanf("%c", &character);           /* eat up c/r, why though? */
  124. }
  125.  
  126. input_valf(prompt,value)
  127. float *value;
  128. char prompt[];
  129. {
  130. char character;
  131. float val;
  132.  
  133.   printf("%s <%f> - ",prompt,*value);
  134.   scanf("%lf",&val);
  135.   if (val != -1) *value = val;
  136.   scanf("%c", &character);           /* eat up c/r, why though? */
  137. }
  138.  
  139. input_string(prompt, string)
  140. char prompt[];
  141. char *string[];
  142. {
  143. char character;
  144. char work_string[64];
  145. int cnt = 0;
  146.  
  147.   character = 1;
  148.   printf("%s", prompt);
  149.   while (character != NULL) {
  150.     scanf("%c", &character);
  151.     if (character == '\n')
  152.       character = NULL;
  153.     work_string[cnt] = character;
  154.     cnt = cnt + 1;
  155.   }
  156.   strcpy(string, &work_string);           /* string is already pointer */
  157. }
  158.  
  159.  
  160.